This disclosure relates to an entropy source for the generation of random numbers, and more particularly for seeding a random number generator.
Random number generation techniques are well-known. Most commonly, random numbers or bits are generated by providing a “pseudorandom” number or bit generator which generates numbers or bits in a deterministic way (such a pseudorandom number generator may be referred to as a “deterministic random number, or bit, generator”) but accepts an input, known as a “seed,” that causes the output to differ. Thus, in very early and primitive “random” number generators, the deterministic random number generator may have been a memory preprogrammed with a large number of “random” entries, which output the next one of those entries each time it was called, starting from the first entry each time it was powered up. This very simple list of numbers could be seeded by multiplying the output by the time of day, taken from the system clock. For primitive applications, this may have been sufficient.
More sophisticated deterministic random bit generators (DRBGs) may rely on an algorithm rather than a list, but are equally predictable once the seed is known. Thus, the randomness of the output depends on the randomness of the seed.
One common use for random numbers is in key generation for data security operations such as encryption/decryption and authentication. Such operations are becoming increasingly common in data storage devices. In data storage devices, short access times are important. Therefore, little time is available for generating random numbers without affecting data throughput, and yet, while current technology does not allow the generation of truly random numbers, the random numbers, and therefore the seeds, should be as close as possible to random for maximum security. Henceforth, these will be referred to as “reliably” random numbers.